<?php

namespace app\adminapi\controller;

use app\model\PlatformConfigModel;
use Webman\Http\Request;

class PlatformConfig extends BaseAdminApi
{
    /**
     * 不需要权限验证的方法
     * @var array
     */
    protected $noNeedPermission = [];

    /**
     * 获取平台配置列表
     */
    public function getConfigList(Request $request)
    {
        $params = $request->get();
        $pageSize = $params['pageSize'] ?? 10;

        $query = PlatformConfigModel::query();

        // 搜索条件
        if (!empty($params['platform_type'])) {
            $query->where('platform_type', $params['platform_type']);
        }
        if (!empty($params['config_name'])) {
            $query->where('config_name', 'like', '%' . $params['config_name'] . '%');
        }
        if (!empty($params['config_key'])) {
            $query->where('config_key', 'like', '%' . $params['config_key'] . '%');
        }

        $paginate = $query->orderBy('created_at', 'desc')
            ->paginate($pageSize);

        return dataByPage($paginate);
    }

    /**
     * 获取配置
     */
    public function getPlatformConfig(Request $request)
    {
        $configKey = $request->get('config_key');

        if (!empty($configKey)) {
            // 获取指定配置
            $config = PlatformConfigModel::where('config_key', $configKey)
                ->first();
            
            if (!$config) {
                return fail('配置不存在');
            }
            
            return data($config);
        } else {
            // 获取所有配置
            $configs = PlatformConfigModel::getAllConfigs();
            return data($configs);
        }
    }

    /**
     * 保存平台配置
     */
    public function saveConfig(Request $request)
    {
        $params = $request->post();

        $validator = validator($params, [
            'config_name' => 'required|max:100',
            'config_key' => 'required|max:100|regex:/^[a-zA-Z0-9_]+$/',
            'config_value' => 'required',
            'description' => 'nullable|max:255'
        ], [
            'config_name.required' => '配置名称不能为空',
            'config_name.max' => '配置名称不能超过100个字符',
            'config_key.required' => '配置键名不能为空',
            'config_key.max' => '配置键名不能超过100个字符',
            'config_key.regex' => '配置键名只能包含字母、数字和下划线',
            'config_value.required' => '配置值不能为空',
            'description.max' => '描述不能超过255个字符'
        ]);

        if ($validator->fails()) {
            return fail($validator->errors()->first());
        }

        try {
            // 处理配置值，如果是JSON字符串则解析为数组
            if (is_string($params['config_value'])) {
                $configValue = json_decode($params['config_value'], true);
                if (json_last_error() !== JSON_ERROR_NONE) {
                    return fail('配置值格式错误，必须是有效的JSON格式');
                }
                $params['config_value'] = $configValue;
            }

            // 根据config_key查找现有配置
            $existConfig = PlatformConfigModel::where('config_key', $params['config_key'])
                ->first();

            if ($existConfig) {
                // 更新现有配置
                $existConfig->update([
                    'config_name' => $params['config_name'],
                    'config_value' => $params['config_value'],
                    'description' => $params['description'] ?? ''
                ]);
                $message = '配置更新成功';
            } else {
                // 新增配置
                PlatformConfigModel::create([
                    'config_name' => $params['config_name'],
                    'config_key' => $params['config_key'],
                    'config_value' => $params['config_value'],
                    'description' => $params['description'] ?? ''
                ]);
                $message = '配置创建成功';
            }

            return success($message);
        } catch (\Exception $e) {
            return fail('操作失败：' . $e->getMessage());
        }
    }

    /**
     * 删除配置
     */
    public function deleteConfig(Request $request)
    {
        $id = $request->post('id');
        if (empty($id)) {
            return fail('配置ID不能为空');
        }

        try {
            $config = PlatformConfigModel::find($id);
            if (!$config) {
                return fail('配置不存在');
            }

            $config->delete();
            return success('删除成功');
        } catch (\Exception $e) {
            return fail('删除失败：' . $e->getMessage());
        }
    }



    /**
     * 获取平台类型列表
     */
    public function getPlatformTypes(Request $request)
    {
        $platformTypes = [
            ['value' => 'wechat_mnp', 'label' => '微信小程序'],
            ['value' => 'alipay_mnp', 'label' => '支付宝小程序'],
            ['value' => 'douyin_mnp', 'label' => '抖音小程序'],
            ['value' => 'baidu_mnp', 'label' => '百度小程序'],
            ['value' => 'qq_mnp', 'label' => 'QQ小程序'],
            ['value' => 'wechat_pay', 'label' => '微信支付'],
            ['value' => 'alipay_pay', 'label' => '支付宝支付'],
            ['value' => 'sms', 'label' => '短信服务'],
            ['value' => 'email', 'label' => '邮件服务'],
            ['value' => 'oss', 'label' => '对象存储']
        ];

        return success('获取成功', $platformTypes);
    }
}